import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { copyFileSync, mkdirSync, existsSync, readdirSync, statSync } from 'fs'
import { join } from 'path'

// 自定义插件：添加缓存控制和相对路径处理
const noCachePlugin = () => {
  return {
    name: 'no-cache-plugin',
    enforce: 'post', // 确保在其他插件（包括 legacy）之后执行
    transformIndexHtml(html) {
      if (process.env.NODE_ENV === 'production') {
        // 添加缓存控制meta标签和版本号
        const version = new Date().toISOString()
        const cacheControlMeta = `
  <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
  <meta http-equiv="Pragma" content="no-cache">
  <meta http-equiv="Expires" content="0">
  <meta name="version" content="${version}">
  <meta name="build-time" content="${version}">`
        // 在 </head> 之前插入，而不是替换
        html = html.replace('</head>', cacheControlMeta + '\n</head>')
        console.log('Added cache control meta tags for production, version:', version)
      }
      return html
    }
  }
}

export default defineConfig({
  plugins: [
    vue(), 
    noCachePlugin()
  ],
  base: process.env.NODE_ENV === 'production' ? '/coolv/vfs/root/products/ebi/sys/coolrpt/coolresource' : '',
  server: {
    port: 3000,
    open: true,
    // 配置反向代理 - 匹配原始代码的URL结构
    proxy: {
      '/coolv': {
        target: 'http://127.0.0.1:8081',
        changeOrigin: true,
        configure: (proxy, _options) => {
          proxy.on('proxyReq', (proxyReq, req, res) => {
            console.log('🚀 代理请求:', req.method, req.url, '->', proxyReq.path)
          })
          proxy.on('proxyRes', (proxyRes, req, res) => {
            console.log('📡 代理响应:', proxyRes.statusCode, req.url)
          })
          proxy.on('error', (err, _req, _res) => {
            console.log('❌ 代理错误:', err.message)
          })
        }
      }
    }
  },
  build: {
    // 构建目标：兼容 Chrome 80+（支持可选链、Promise.allSettled 等 ES2020 特性）
    // 注意：Promise.allSettled 已在 useComprehensiveScore.js 中添加 polyfill
    target: 'es2020',
    outDir: 'dist',
    assetsDir: 'assets',
    sourcemap: false,
    rollupOptions: {
      output: {
        // 固定文件名
        entryFileNames: 'assets/index.js',
        chunkFileNames: 'assets/[name].js',
        assetFileNames: (assetInfo) => {
          const info = assetInfo.name.split('.')
          const ext = info[info.length - 1]
          if (/css$/i.test(ext)) {
            return `assets/index.css`
          }
          return `assets/[name].[ext]`
        }
      },
      // 构建完成后的钩子
      plugins: [
        {
          name: 'copy-xlsx-to-assets',
          closeBundle() {
            // 将 xlsx.full.min.js 从 dist/libs 复制到 dist/assets
            const distDir = join(process.cwd(), 'dist')
            const sourceFile = join(distDir, 'libs', 'xlsx.full.min.js')
            const targetDir = join(distDir, 'assets')
            const targetFile = join(targetDir, 'xlsx.full.min.js')
            
            console.log('[copy-xlsx] 源文件路径:', sourceFile)
            console.log('[copy-xlsx] 目标路径:', targetFile)
            
            if (!existsSync(targetDir)) {
              mkdirSync(targetDir, { recursive: true })
            }
            
            if (existsSync(sourceFile)) {
              copyFileSync(sourceFile, targetFile)
              console.log('✅ 已复制 xlsx.full.min.js 从 dist/libs/ 到 dist/assets/')
            } else {
              console.warn('⚠️  未找到源文件:', sourceFile)
            }
          }
        },
        {
          name: 'copy-personnel-portrait-to-assets',
          closeBundle() {
            // 将 personnel_portrait.json 从 dist/data 复制到 dist/assets
            const distDir = join(process.cwd(), 'dist')
            const sourceFile = join(distDir, 'data', 'personnel_portrait.json')
            const targetDir = join(distDir, 'assets')
            const targetFile = join(targetDir, 'personnel_portrait.json')
            
            console.log('[copy-json] 源文件路径:', sourceFile)
            console.log('[copy-json] 目标路径:', targetFile)
            
            if (!existsSync(targetDir)) {
              mkdirSync(targetDir, { recursive: true })
            }
            
            if (existsSync(sourceFile)) {
              copyFileSync(sourceFile, targetFile)
              console.log('✅ 已复制 personnel_portrait.json 从 dist/data/ 到 dist/assets/')
            } else {
              console.warn('⚠️  未找到人员画像JSON文件:', sourceFile)
            }
          }
        }
      ]
    },
    // 保持默认的 public 目录复制行为
    copyPublicDir: true
  },
  // 排除不需要的文件，避免Vite处理原始项目文件
  optimizeDeps: {
    exclude: []
  },
  // 定义别名，避免路径冲突
  resolve: {
    alias: {
      '@': '/src'
    }
  }
})
